﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algorithm.Middle_17_LetterCombinations
{
    class MainProject
    {
        static void Main(string[] args)
        {
            foreach (var item in LetterCombinations("2342"))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
        public static IList<string> LetterCombinations(string digits)
        {
            IList<string> list = new List<string>();
            if (digits.Length == 0) return list;
            Dictionary<string, string> dic = new Dictionary<string, string>()
            {
                {"2","abc" }, {"3","def" }, {"4","ghi" }, {"5","jkl" },
                {"6","mno" }, {"7","pqrs" }, {"8","tuv" }, {"9","wxyz" },
            };
            if (digits.Length == 1)
            {
                for (int i = 0; i < dic[digits].Length; i++)
                {
                    list.Add(dic[digits][i].ToString());
                }
            }
            else if (digits.Length == 2)
            {
                for (int i = 0; i < dic[digits[0].ToString()].Length; i++)
                {
                    for (int j = 0; j < dic[digits[1].ToString()].Length; j++)
                    {
                        list.Add(dic[digits[0].ToString()][i].ToString() + dic[digits[1].ToString()][j].ToString());
                    }    
                }
            }
            else if (digits.Length == 3)
            {
                for (int i = 0; i < dic[digits[0].ToString()].Length; i++)
                {
                    for (int j = 0; j < dic[digits[1].ToString()].Length; j++)
                    {
                        for (int k = 0; k < dic[digits[2].ToString()].Length; k++)
                        {
                            list.Add(dic[digits[0].ToString()][i].ToString() + dic[digits[1].ToString()][j].ToString() + dic[digits[2].ToString()][k].ToString());
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < dic[digits[0].ToString()].Length; i++)
                {
                    for (int j = 0; j < dic[digits[1].ToString()].Length; j++)
                    {
                        for (int k = 0; k < dic[digits[2].ToString()].Length; k++)
                        {
                            for (int l = 0; l < dic[digits[3].ToString()].Length; l++)
                            {
                                list.Add(dic[digits[0].ToString()][i].ToString() + dic[digits[1].ToString()][j].ToString() + dic[digits[2].ToString()][k].ToString() + dic[digits[3].ToString()][l].ToString());
                            }
                        }
                    }
                }
            }
            return list;
        }
    }
}
